﻿using Might.Infrastructure.DOM;
using Might.Infrastructure.ModelicaDOM.Modifications;

namespace Might.Infrastructure.ModelicaDOM {

    /// <summary>
    /// Visibility of Modelica elements
    /// </summary>
    public enum Visibility {
        /// <summary>
        /// Public visibility
        /// </summary>
        Public,
        /// <summary>
        /// Protected visibility
        /// </summary>
        Protected
    }
    
    
    /// <summary>
    /// Represents components that are parts of Modelica classes.
    /// </summary>
    [ContainedChild(GroupNames.ModelicaComponentModification,typeof( IComponentModification))]
	[ContainedChild(GroupNames.ModelicaComponentRedefinition,typeof( IComponentRedefinition))]
	[ContainedChild(GroupNames.ModelicaClassRedefinition,typeof( IClassRedefinition))]	
    [ContainedChild(GroupNames.Annotations, typeof(IDomNode))]
    [ContainedReference(ReferenceNames.ComponentTypeReference)]
    public interface IComponent {

        /// <summary>
        /// Name of the component
        /// </summary>
        string ComponentName { get; set; }

        /// <summary>
        /// Visibility of component
        /// </summary>
        Visibility ComponentVisibility { get; set; }

        /// <summary>
        /// Type of the component.
        /// </summary>
        //IModelicaClass ComponentType { get; set; }
    }
}
